﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using CheckClicker;

namespace CheckClicker
{
    public partial class frmMain : Form
    {
        string transType = string.Empty;
        CommunicationManager comm = new CommunicationManager();
        #region "Biến cục bộ trong Form"

        private OleDbConnection objConnect;
        private DataTable objDataTable;
        private enum varMode : int { AddMode, EditMode, DeleteMode }
        #endregion

        #region "Tạo Kết nối và hủy kết nối"

        private void subCreateConnect()
        {
            String varChuoiConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ;" +
                        "Data Source =" + Application.StartupPath + @"\Database.mdb;" +
                        "User ID = Admin";
            objConnect = new OleDbConnection(varChuoiConnect);
            objConnect.Open(); //Mở kết nối
        }

        private void subDestroyConnect()
        {
            objConnect.Close(); //Đóng kết nối
            objConnect.Dispose();//Giải phóng tài nguyên
            objConnect = null; //Hủy đối tượng
        }
        #endregion
        #region "Add du lieu"
        private void subInsertByAdapterCommandBuilder(string id, string name)
        {
            //Tạo kết nối tới file Access
            subCreateConnect();
            //Nạp dữ liệu vào DataTable
            objDataTable = new DataTable("Abc");
            //Tạo đối tượng Adapter và Fill vào DataTable
            OleDbDataAdapter objAdapter = new OleDbDataAdapter("select * from NewID", objConnect);
            objAdapter.Fill(objDataTable);
            //Tạo command cho Adapter
            new OleDbCommandBuilder(objAdapter);
            //Insert dữ liệu vào DataTable
            DataRow objRow = objDataTable.NewRow();
            objRow["ID"] = id;
            objRow["Name"] = name;
            objDataTable.Rows.Add(objRow);
            //Insert dữ liệu vào nguồn
            objAdapter.Update(objDataTable);
            //Hủy đối tượng
            subDestroyConnect();
        }
        #endregion
        // Truy xuat du lieu
        private void subSelectByDataAdapter()
        {
            //Tạo kết nối tới file Access
            subCreateConnect();
            //Tao Command
            OleDbCommand objCommand = new OleDbCommand();
            objCommand.Connection = objConnect;
            objCommand.CommandType = CommandType.Text;
            objCommand.CommandText = "Select * From NewID";
            //Taoj đối tượng Adapter
            OleDbDataAdapter objAdapter = new OleDbDataAdapter();
            objAdapter.SelectCommand = objCommand;
            //Tạo DataTable nhận dữ liệu trả về
            objDataTable = new DataTable("abc");
            objAdapter.Fill(objDataTable);
            //Gán dữ liệu vào Datagrid
            //Hủy các đối tượng
            objCommand.Dispose();
            objCommand = null;
            objDataTable.Dispose();
            objDataTable = null;
            objAdapter.Dispose();
            objAdapter = null;
            subDestroyConnect();
        }
        #region "Load du lieu"
        private void LoadData()
        {
            //Tạo kết nối tới file Access
            subCreateConnect();
            //Truy vấn dữ liệu
            String varSelect = "Select * from NewID";//Lệnh SQL
            OleDbCommand objCommand = new OleDbCommand(varSelect, objConnect);
            //Tạo DataReader nhận dữ liệu trả về
            OleDbDataReader objReader = objCommand.ExecuteReader();
            //Tạo đối tượng DataTable và Load DataReader vào
            objDataTable = new DataTable("abc");
            objDataTable.Load(objReader);
            //Gán dữ liệu vào Datagrid
            //Hủy các đối tượng
            objCommand.Dispose();
            objCommand = null;
            objReader.Close();
            objReader.Dispose();
            objReader = null;
            objDataTable.Dispose();
            objDataTable = null;
            subDestroyConnect();
        }


        #region "Write data to comport"
        private void Writedata(string msg)
        {
            subCreateConnect();
            //Truy vấn dữ liệu
            String varSelect = "Select * from Comport";//Lệnh SQL
            OleDbCommand objCommand = new OleDbCommand(varSelect, objConnect);
            //Tạo DataReader nhận dữ liệu trả về
            OleDbDataReader objReader = objCommand.ExecuteReader();
            objDataTable = new DataTable("abc");
            objDataTable.Load(objReader);
            DataRow jobRow = objDataTable.Rows[0];
            string name = jobRow["Name"].ToString();
            string parity = jobRow["Parity"].ToString();
            string stop = jobRow["Stop"].ToString();
            string data = jobRow["Data"].ToString();
            string baud = jobRow["Baud"].ToString();
            string start = "START";

            comm.OpenPort1(baud, data, stop, parity, name, start);
            comm.WriteData(msg);
        }
        #endregion

        #endregion

        public frmMain()
        {
            InitializeComponent();
        }

        private void btnSet_Click(object sender, EventArgs e)
        {
            frmSetting frmset = new frmSetting();
            frmset.ShowDialog();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            this.Hide();
            frmAdd frmadd = new frmAdd();
            frmadd.ShowDialog();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            comm.closePort();
            this.Hide();
            frmtime frmstart = new frmtime();
            frmstart.Show();
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            Writedata("START");

        }

        private void rdoHex_CheckedChanged(object sender, EventArgs e)
        {
            if (rdoHex.Checked == true)
            {
                comm.CurrentTransmissionType = CheckClicker.CommunicationManager.TransmissionType.Hex;
            }
            else
            {
                comm.CurrentTransmissionType = CheckClicker.CommunicationManager.TransmissionType.Text;
            }

        }

        private void SetControlState()
        {
            rdoText.Checked = true;
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            this.MaximizeBox = false;
        }

    }
}
